package com.colabo.j2ee.web.oaf.security;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.security.core.userdetails.UserDetails;

import com.colabo.j2ee.web.core.exception.ServiceException;


/**
 * 若默认权限模型无法满足系统需求时可以实现这个接口让Spring Security根据自定义方式取得用户数据
 */
public interface ICustomUserDetailsService {
	/**
	 * 获得用户权限信息
	 */
	public UserDetails loadUserByUsername(String username) throws ServiceException;

	/**
	 * 是否需要修改密码
	 */
	public boolean needChangePassword(String username) throws ServiceException;

	/**
	 * 保存用户
	 */
	public void saveUser(UserDetails userDetails) throws ServiceException;

	/**
	 * 用户权限验证成功后用来进行后续操作. 如果这个方法中需要写数据库, 需要在事务控制配置文件中手动将方法设置为read-only="false",
	 * 否则不会启动事务
	 */
	public void onSuccessfulAuthentication(HttpServletRequest request, HttpServletResponse response, String username)
			throws ServiceException;

	/**
	 * 用户权限验证失败后用来进行后续操作. 如果这个方法中需要写数据库, 需要在事务控制配置文件中手动将方法设置为read-only="false",
	 * 否则不会启动事务
	 */
	public void onUnsuccessfulAuthentication(HttpServletRequest request, HttpServletResponse response, String username)
			throws ServiceException;

}
